﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using Entidades.Sistema.Venta;
using Entidades.Sistema.Base;

namespace Entidades.Sistema.Produccion
{
    public class DiagramacionProduccion
    {

        private int _idDiagramacionProduccion;
        private DateTime _fecha;
        private DateTime _fechaElaboracion;
        private DateTime _fechaCierre;
        private DateTime _fechaEntrega;
        private List<ProduccionProducto> CollProduccionProducto;
        private List<Pedido> CollPedidos;
        private List<EstadoDiagramacion> estados;
        private DiagramacionEstado _estado;
        private List<InsumoNecesario> CollInsumos;

        //No Persistente - Solo se utiliza para grilla       

        public DiagramacionProduccion()
        {
            CollProduccionProducto = new List<ProduccionProducto>();
            CollPedidos = new List<Pedido>();
            estados = new List<EstadoDiagramacion>();
            CollInsumos = new List<InsumoNecesario>();
        }

        public List<EstadoDiagramacion> Estados
        {
            get { return estados; }
        }
        public string Comentario { get; set; }
        public void AgregarEstado(EstadoDiagramacion e)
        {
            estados.Add(e);
        }
        public DiagramacionEstado Estado
        {
            get { return _estado; }
            set { _estado = value; }
        }
        public int IdDiagramacionProduccion
        {
            get { return _idDiagramacionProduccion; }
            set { _idDiagramacionProduccion = value; }
        }
        public DateTime Fecha
        {
            get { return _fecha; }
            set { _fecha = value; }
        }
        public DateTime FechaElaboracion
        {
            get { return _fechaElaboracion; }
            set { _fechaElaboracion = value; }
        }
        public DateTime FechaCierre
        {
            get { return _fechaCierre; }
            set { _fechaCierre = value; }
        }
        public DateTime FechaEntrega
        {
            get { return _fechaEntrega; }
            set { _fechaEntrega = value; }
        }

        public List<ProduccionProducto> ProduccionProductos
        {
            get { return CollProduccionProducto; }

        }
        public void AgregarDetalle(ProduccionProducto det)
        {
            CollProduccionProducto.Add(det);
        }
        public void EliminarDetalle(ProduccionProducto det)
        {
            CollProduccionProducto.RemoveAll(x => x.Producto.IdProducto == det.Producto.IdProducto);
        }        
        public List<Pedido> Pedidos
        {
            get { return CollPedidos; }
        }
        public void AgregarPedido(Pedido pedido)
        {
            CollPedidos.Add(pedido);
        }
        public void EliminarPedido(Pedido pedido)
        {
            CollPedidos.RemoveAll(x => x.IdPedido == pedido.IdPedido);
        }

        //Patron State
        public List<AbstraccionEstado> proximosEstados
        {
            get { return _estado.proximosEstados; }
        }

        public void cambioEstado(DiagramacionEstado proximoEstado, string comentario)
        {
            _estado.cambioEstado(proximoEstado, comentario);
        }
        public List<InsumoNecesario> InsumosNecesarios
        {
            get { return CollInsumos; }
        }
        public void AgregarInsumo(InsumoNecesario rec)
        {
            CollInsumos.Add(rec);
        }
        public void EliminarInsumo(InsumoNecesario rec)
        {
            CollInsumos.RemoveAll(x => x.Insumo.IdInsumo == rec.Insumo.IdInsumo);
        }     
        
    }
    public class EstadoDiagramacion
    {
        public int IdEstado { get; set; }
        public string Comentario { get; set; }
        public string Id_Usuario { get; set; }
        public DateTime Fecha { get; set; }
    }
    

}
